package com.micro.ai.commons.domain;

import com.fasterxml.jackson.annotation.JsonInclude;

import java.io.Serializable;
import java.util.List;

/**
 * 分页响应模型
 * 
 * @param <T> 数据类型
 * @author micro-ai
 * @since 0.0.1
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public record PageResponse<T>(
    /**
     * 数据列表
     */
    List<T> records,
    
    /**
     * 总记录数
     */
    Long total,
    
    /**
     * 当前页码
     */
    Integer current,
    
    /**
     * 页大小
     */
    Integer size,
    
    /**
     * 总页数
     */
    Integer pages,
    
    /**
     * 是否有下一页
     */
    Boolean hasNext,
    
    /**
     * 是否有上一页
     */
    Boolean hasPrevious
) implements Serializable {

    /**
     * 创建分页响应
     */
    public static <T> PageResponse<T> of(List<T> records, Long total, Integer current, Integer size) {
        int pages = (int) Math.ceil((double) total / size);
        boolean hasNext = current < pages;
        boolean hasPrevious = current > 1;
        
        return new PageResponse<>(
            records,
            total,
            current,
            size,
            pages,
            hasNext,
            hasPrevious
        );
    }

    /**
     * 创建空的分页响应
     */
    public static <T> PageResponse<T> empty() {
        return of(List.of(), 0L, 1, 10);
    }

    /**
     * 判断是否为空
     */
    public boolean isEmpty() {
        return records == null || records.isEmpty();
    }

    /**
     * 判断是否不为空
     */
    public boolean isNotEmpty() {
        return !isEmpty();
    }
}
